using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools._Configuration
{
    /// <summary>
    /// <para>Alter Diagram Template</para>
    /// <para>Alters the properties of a diagram template such as its name, how it handles vertices along input network edges, whether the related diagrams can be stored or extended, the margin between containers and their contents in these diagrams, the removal of its rule and layout, and the reset of the diagram layer definition to default.</para>
    /// <para>更改逻辑示意图模板的属性，例如其名称、沿输入网络边处理折点的方式、是否可以存储或扩展相关逻辑示意图、容器与其在这些逻辑示意图中的内容之间的边距、移除其规则和布局，以及将逻辑示意图图层定义重置为默认值。</para>
    /// </summary>    
    [DisplayName("Alter Diagram Template")]
    public class AlterDiagramTemplate : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AlterDiagramTemplate()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Network</para>
        /// <para>The utility network or trace network of the diagram template to alter.</para>
        /// <para>要更改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// </param>
        /// <param name="_template_name">
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to alter.</para>
        /// <para>要更改的逻辑示意图模板的名称。</para>
        /// </param>
        public AlterDiagramTemplate(object _in_utility_network, object _template_name)
        {
            this._in_utility_network = _in_utility_network;
            this._template_name = _template_name;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Alter Diagram Template";

        public override string CallName => "nd.AlterDiagramTemplate";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_utility_network, _template_name, _out_name, _is_default_template.GetGPValue(), _are_rules_and_layouts_removed.GetGPValue(), _are_vertices_kept.GetGPValue(), _container_margin, _out_utility_network, _out_template_name, _is_diagram_storage_enabled.GetGPValue(), _is_diagram_extension_enabled.GetGPValue(), _description, _are_layer_definitions_removed.GetGPValue()];

        /// <summary>
        /// <para>Input Network</para>
        /// <para>The utility network or trace network of the diagram template to alter.</para>
        /// <para>要更改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to alter.</para>
        /// <para>要更改的逻辑示意图模板的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _template_name { get; set; }


        /// <summary>
        /// <para>New Template Name</para>
        /// <para>The new name of the template.</para>
        /// <para>模板的新名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("New Template Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_name { get; set; } = null;


        /// <summary>
        /// <para>Default template</para>
        /// <para><xdoc>
        ///   <para>Specifies the default status of the template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The input diagram template will be the default template.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The input diagram template will not be the default template. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>The default template is the one used when generating a diagram if a template is not specified. It is also the template used when using New Diagram on the Data tab on the utility network or trace network tab set if another template is not specified.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定模板的默认状态。
        ///   <bulletList>
        ///     <bullet_item>选中 - 输入逻辑示意图模板将成为默认模板。</bullet_item><para/>
        ///     <bullet_item>未选中 - 输入逻辑示意图模板将不是默认模板。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>如果未指定模板，则默认模板是生成逻辑示意图时使用的模板。如果未指定其他模板，则在公共设施网络或追踪网络选项卡集的数据选项卡上使用新建逻辑示意图时，它也是使用的模板。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Default template")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_default_template_value _is_default_template { get; set; } = _is_default_template_value._false;

        public enum _is_default_template_value
        {
            /// <summary>
            /// <para>DEFAULT_TEMPLATE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DEFAULT_TEMPLATE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NOT_DEFAULT_TEMPLATE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NOT_DEFAULT_TEMPLATE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Remove the diagram template rule and layout definitions</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the template rule and layout definitions will be removed.
        ///   <bulletList>
        ///     <bullet_item>Checked—The rule and layout definitions related to the input diagram template will be removed.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The rule and layout definitions related to the input diagram template will not be removed. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否删除模板规则和布局定义。
        ///   <bulletList>
        ///     <bullet_item>选中 - 将移除与输入逻辑示意图模板相关的规则和布局定义。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会移除与输入逻辑示意图模板相关的规则和布局定义。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Remove the diagram template rule and layout definitions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _are_rules_and_layouts_removed_value _are_rules_and_layouts_removed { get; set; } = _are_rules_and_layouts_removed_value._false;

        public enum _are_rules_and_layouts_removed_value
        {
            /// <summary>
            /// <para>REMOVE_RULES_AND_LAYOUTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REMOVE_RULES_AND_LAYOUTS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_REMOVE_RULES_AND_LAYOUTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_REMOVE_RULES_AND_LAYOUTS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Keep initial vertices on edges</para>
        /// <para><xdoc>
        ///   <para>Specifies how vertices along the GIS edges will be managed in the diagrams based on the template.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—All vertices that display along GIS edges will be preserved on the associated edges in each network diagram based on the template.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Diagram edges will be drawn as straight lines between their connected junctions. This is the default.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>For performance quality, check this parameter only when needed. If your template is configured to run an automatic layout at diagram generation, for example, checking this option makes sense for the Relative Mainline and Partial Overlapping Edges diagram layouts. The other diagram layouts don't use diagram edges geometry when they execute.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何在基于模板的逻辑示意图中管理沿 GIS 边的折点。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 沿 GIS 边显示的所有折点都将保留在基于模板的每个网络逻辑示意图的关联边上。</bullet_item><para/>
        ///     <bullet_item>未选中 - 逻辑示意图边将在其连接的交汇点之间绘制为直线。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>对于性能质量，请仅在需要时检查此参数。例如，如果模板配置为在生成逻辑示意图时运行自动布局，则选中此选项对于“相对主线”和“部分重叠边”逻辑示意图布局有意义。其他逻辑示意图布局在执行时不使用逻辑示意图边几何图形。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Keep initial vertices on edges")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _are_vertices_kept_value _are_vertices_kept { get; set; } = _are_vertices_kept_value._false;

        public enum _are_vertices_kept_value
        {
            /// <summary>
            /// <para>KEEP_VERTICES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("KEEP_VERTICES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_KEEP_VERTICES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_KEEP_VERTICES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Container Margin</para>
        /// <para>The minimum distance between the center of any junctions inside the container and the container border.</para>
        /// <para>容器内任何交汇点的中心与容器边界之间的最小距离。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Container Margin")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _container_margin { get; set; } = "0 Unknown";


        /// <summary>
        /// <para>Output Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_utility_network { get; set; }


        /// <summary>
        /// <para>Output Diagram Template</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_template_name { get; set; }


        /// <summary>
        /// <para>Enable diagram storage</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the diagrams based on the template can be stored.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The diagrams based on the template can be stored. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The diagrams based on the template cannot be stored.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否可以存储基于模板的逻辑示意图。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 可以存储基于模板的逻辑示意图。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 无法存储基于模板的逻辑示意图。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Enable diagram storage")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_diagram_storage_enabled_value _is_diagram_storage_enabled { get; set; } = _is_diagram_storage_enabled_value._true;

        public enum _is_diagram_storage_enabled_value
        {
            /// <summary>
            /// <para>ENABLE_DIAGRAM_STORAGE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ENABLE_DIAGRAM_STORAGE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DISABLE_DIAGRAM_STORAGE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DISABLE_DIAGRAM_STORAGE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Enable to extend diagram</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the diagrams based on the template can be extended.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The diagrams based on the template can be extended by connectivity, traversability, containment, or attachment.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The diagrams based on the template cannot be extended. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否可以扩展基于模板的逻辑示意图。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 基于模板的逻辑示意图可通过连通性、可遍历性、包含或附件进行扩展。</bullet_item><para/>
        ///     <bullet_item>未选中 - 无法扩展基于模板的逻辑示意图。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Enable to extend diagram")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_diagram_extension_enabled_value _is_diagram_extension_enabled { get; set; } = _is_diagram_extension_enabled_value._false;

        public enum _is_diagram_extension_enabled_value
        {
            /// <summary>
            /// <para>ENABLE_DIAGRAM_EXTENSION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ENABLE_DIAGRAM_EXTENSION")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DISABLE_DIAGRAM_EXTENSION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DISABLE_DIAGRAM_EXTENSION")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Description</para>
        /// <para>The description of the template.</para>
        /// <para>模板的说明。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Description")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _description { get; set; } = null;


        /// <summary>
        /// <para>Reset the diagram template layer definition to default</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the diagram template layer definition will be reset to default.
        ///   <bulletList>
        ///     <bullet_item>Checked—The diagram layer definition related to the input diagram template will be reset to default (removed).  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The diagram layer definition related to the input diagram template will not be removed. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否将逻辑示意图模板图层定义重置为默认值。
        ///   <bulletList>
        ///     <bullet_item>选中—与输入逻辑示意图模板相关的逻辑示意图图层定义将重置为默认值（已移除）。</bullet_item><para/>
        ///     <bullet_item>未选中—不会移除与输入逻辑示意图模板相关的逻辑示意图图层定义。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reset the diagram template layer definition to default")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _are_layer_definitions_removed_value _are_layer_definitions_removed { get; set; } = _are_layer_definitions_removed_value._false;

        public enum _are_layer_definitions_removed_value
        {
            /// <summary>
            /// <para>REMOVE_LAYER_DEFINITIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REMOVE_LAYER_DEFINITIONS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_REMOVE_LAYER_DEFINITIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_REMOVE_LAYER_DEFINITIONS")]
            [GPEnumValue("false")]
            _false,

        }

        public AlterDiagramTemplate SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}